package com.zhx.common.chat.dao;

import com.zhx.common.chat.domain.entity.MessageMark;
import com.zhx.common.chat.mapper.MessageMarkMapper;
import com.zhx.common.chat.service.IMessageMarkService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhx.common.common.domain.enums.NormalOrNoEnum;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 消息标记表 服务实现类
 * </p>
 *
 * @author zhx
 * @since 2024-04-24
 */
@Service
public class MessageMarkDao extends ServiceImpl<MessageMarkMapper, MessageMark> {

    /**
     * 根据消息ID批量获取有效的标记信息。
     * <p>此方法将查询出与给定消息ID列表中相关联的，并且状态为正常的标记信息。</p>
     *
     * @param msgIds 消息ID的列表，这些ID对应的消息将被查询其标记信息。
     * @return 返回一个包含所有符合条件的标记信息的列表。每个标记信息包含消息ID和状态等字段。
     */
    public List<MessageMark> getValidMarkByMsgIdBatch(List<Long> msgIds) {
        return lambdaQuery()
                .in(MessageMark::getMsgId, msgIds)
                .eq(MessageMark::getStatus, NormalOrNoEnum.NORMAL)
                .list();
    }

    public MessageMark get(Long uid, Long msgId, Integer markType) {
        return lambdaQuery()
                .eq(MessageMark::getUid, uid)
                .eq(MessageMark::getMsgId, msgId)
                .eq(MessageMark::getType, markType)
                .one();
    }

    public Integer getMarkCount(Long msgId, Integer markType) {
        return lambdaQuery()
                .eq(MessageMark::getMsgId, msgId)
                .eq(MessageMark::getType, markType)
                .eq(MessageMark::getStatus,NormalOrNoEnum.NORMAL.getStatus())
                .count();
    }
}
